package com.zheng.cahce.service;

import java.util.List;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

/**
 * 
 * @Description: 缓存Service组件 
 * @author: zhengchuanqing
 * @date: 2019年3月6日 下午10:25:17
 * @throws
 */
@Service
public class CacheService {
	private final static Logger logger = LoggerFactory.getLogger(CacheService.class);
	@Autowired
	private RedisTemplate<String, Object> redisTemplate;
	/**
	 * 
	 * @Description: 判断key是否存在
	 * @author: zhengchuanqing
	 * @date: 2019年3月6日 下午10:30:35  
	 * @param: 
	 * @return: boolean true 存在 false不存在
	 * @throws
	 */
	public boolean hasKey(String key) {
		try {
			return redisTemplate.hasKey(key);
		} catch (Exception e) {
			logger.error("[redis缓存] 判断key是否存在报错", e);
		}
		return false;
	}
	/**
	 * 
	 * @Description: 删除缓存 
	 * @author: zhengchuanqing
	 * @date: 2019年3月6日 下午10:31:38  
	 * @param: 
	 * @return: boolean true 成功 false 失败
	 * @throws
	 */
	public boolean delete(List<String> keys) {
		if(keys == null || keys.isEmpty()) {
			return false;
		}
		try {
			if (keys.size() == 1) {
				redisTemplate.delete(keys.get(0));
				return true;
			}
			redisTemplate.delete(keys);
			return true;
		} catch (Exception e) {
			logger.error("[redis缓存] 删除缓存失败", e);
		}
		return false;
	}
	/**
	 * 
	 * @Description: 根据key从缓存中获取值
	 * @author: zhengchuanqing
	 * @date: 2019年3月6日 下午10:47:27  
	 * @param: key 键
	 * @return: Object
	 * @throws
	 */
	public Object getValue(String key) {
		Object value = null;
		try {
			value = redisTemplate.opsForValue().get(key);
		} catch (Exception e) {
			logger.error("[redis缓存] 根据key从缓存中获取值 报错", e);
		}
		return value; 
	}
	/**
	 * 
	 * @Description: 将对象存储到redis中 
	 * @author: zhengchuanqing
	 * @date: 2019年3月6日 下午10:49:12  
	 * @param key 键
	 * @param value 值
	 * @return: boolean true成功 false失败
	 * @throws
	 */
	public boolean setValue(String key, Object value) {
		try {
			redisTemplate.opsForValue().set(key, value);
			return true;
		} catch (Exception e) {
			logger.error("[redis缓存] 根据key从缓存中获取值 报错", e);
		}
		return false;
	}
	/**
	 * 
	 * @Description: 将对象存储到redis中并设置时间
	 * @author: zhengchuanqing
	 * @date: 2019年3月6日 下午10:50:19  
	 * @param key 键
	 * @param value 值
	 * @param time 时间(秒) ，设置的时间小于等于0 则设置无限期有效
	 * @return: boolean true成功 false失败
	 * @throws
	 */
	public boolean set(String key, Object value, long time) {
		try {
			if (time > 0) {
				redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
				return true;
			}
			setValue(key, value);
			return true;
		} catch (Exception e) {
			logger.error("[redis缓存] 根据key从缓存中获取值 报错", e);
		}
		return false;

	}
}
